|
Tutorial d'utilisation
Ce
petit tutorial va vous apprendre comment configurer les sources de
jackshell, le compiler et après, vous en ferez ce que vous voudrez
:)
I)
Configuration de l'header "jacklib.h"
Toute
la configuration s'effectue dans le fichier "jacklib.h" qui
constitue le fichier d'entete principal du programme. Ce fichier
se compose des définitions des constantes du code (c'est qu'il
faudra editer pour la config), des prototypes des fonctions de la
librairie propre au programme et éventuellement des variables
globales, mais la quasi totalité des variables (buffer, entiers...)
sont déclarés au début des fonctions, ce qui permet la libération de
la mémoire à la sortie de la fonction et donc une meilleure
utilisation de celle-ci.
Voici
la description de chaque contantes :
SERVER_NAME : Nom du serveur dans son répertoire
d'installation (après infection).
INSTALL_DIR : Chemin d'installation du serveur après
infection.
REG_NAME : Nom du programme dans la base de registre (pour
le lancement au boot).
REG_KEY : Clé registre pour le lancement au démarrage
(laisser par défaut recommandé).
PORT : Port d'écoute du serveur, de préférence un port
inutilisé qui passe inaperçu.
NOTIF_URL : URL où se situe le script php pour la
notification d'IP (voir plus bas pour la notif).
WAIT : Attente en millisecondes du serveur lorsque la
machine est offline (laisser par défaut
recommandé).
ANS_SIZE : Taille en octet de la mémoire allouée pour
l'exécution du shell (laisser par défaut
recommandé).
Lorsque vous modifiez la valeur d'une constante, pensez à laissez
les quotes s'il y'en a ! Ces constantes constituent la configuration
du serveur, si vous désirez modifier le reste, je vous conseille de
savoir ce que vous faites...
II) Notification d'IP par PHP
La configuration de la notification est primordiale. En effet, le
serveur vérifiera qu'il existe une connexion internet active avant
de recevoir un client. Dans le cas où la machine est offline, le
serveur attendra le temps indiqué par la constante de configuration
WAIT et à chaque fois, checkera la connexion à tous ces intervalles
de temps. Si une connexion est détectée, le serveur enverra une
requete HTTP au script PHP indiqué dans la constante de
configuration NOTIF_URL et attendra une connexion
client.
L'utilisation de la notification implique la création
d'un petit script PHP afin de logguer les infos qui nous
intéresse. Voici un exemple de script, qui marque la date et l'ip
dans un fichier, à vous de l'adapter selon vos
besoin...
<?php ## notif.php
## $date=date("d/m/Y à
H\hi"); $fp=fopen("notifs.txt","a"); fwrite(fp,"IP :
$REMOTE_ADDR logguée le
$date"); fclose($fp); ?>
Astuce : Vous pouvez très bien passer des variables à votre
script par l'url de notfication de la constante de configuration du
serveur. Par exemple pour protéger le script par un passwd, on sera
sûr que la notif provient de jackshell.
III) Utilisation du serveur
Maintenant qu'on a vu comment configurer le serveur et recevoir
automatiquement l'IP de la machine infectée, on va apprendre à
dompter la bête et gouter à ses capacités.
La fonction principale du serveur jackshell est de rediriger un
véritable remote shell vers la socket client, en clair il permet
d'exécuter n'importe quelle commande windows sur la machine cible,
le serveur stockera le resultat de la commande dans un buffer et
renverra son contenu au client. De plus le serveur possède une
détection de commandes spécifiques telles que la commande de
déconnexion, la messagebox (un classique ;)), et du nouveau avec les
Multimedia Command Strings, une API windows qui permet un control
multimedia (audio, video) quasi total sur la machine.
Pour envoyer une commande au serveur, c'est très simple, il
suffit de passer par une socket client stable (telnet n'est pas
vraiment top, meme nul car il envoit les lettres au fur et à mesure
qu'on les tape). Optons pour Netcat, il n'y a pas mieux. Exemple
de connexion : nc ip_de_la_personne 44 Un petit message du
serveur confirmera le succès de votre connexion.
** a) Le remote shell Il s'agit de la commande principale du
serveur, toutes commandes non reconnues comme commandes spéciales
par le serveur seront considérées comme une commande
shell. Exemples : dir; mdkir; del; netstat; ping...
A
noter qu'il ne faut absolument pas exécuter de commandes qui
demandent une confirmation du client, par exemple si vous exécutez
"ftp -n", le serveur passera la main au système qui attendra la
suite des instructions pour la connexion FTP et ainsi vous bloquera
l'accès au serveur. Nous pourrons probablement parer ce bug avec
l'utilisation d'un multi-Thread dans un futur proche.
** b)
WinExec (show et hide) Cette fonction est accessible par les
commandes "exec" et "exeh" du serveur. L'utilité de WinExec est
qu'elle peut exécuter n'importe quel programme du système (par
contre sans retour comme le shell), et repasser la main au programme
(ce qui évite de rencontrer le meme problème que
précédemment). Par exemple si vous ouvrez notepad avec le shell,
il faudra que notepad soit fermé par l'utilisateur sur la machine
cible avant que vous puissiez reprendre la main sur le serveur.
Alors que si vous ouvrez notepad avec la commande "exec", vous
garderez la main sur le serveur meme si notepad est toujours en
cours d'exécution. Exemple : exec notepad
La différence
entre "exec" et "exeh" est que la première exécute un programme en
mode visible et la deuxième en mode invisible.
** c)
mciSendStrings Cette fonction permet d'envoyer au serveur des
chaines multimedia, c'est une fonction des API windows. "Multimedia
Command Strings". Il suffit d'utiliser la commande
"mcmd" Exemple (ouverture du lecteur CD) : mcmd set cdaudio door
open
la liste des commandes multimedia est disponible dans la base
MSDN de microsoft : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_multimedia_command_strings.asp
**
d) MessageBox Je passe rapidement sur cette fonction accessible
par la commande "msgbx" qui permet d'envoyer une message box sur la
machine cible. Ca ne sert à rien, c'est juste pour la nostalgie
:) A noter que vous pourrez reprendre la main sur le serveur que
lorsque la personne distante aura validé la message
box... Exemple : msgbx salut
** e) Déconnexion Utile
quand vous avez fini de jouer et quitter proprement le serveur par
la commande "bye". Le serveur vous répondra et fermera la
socket.
Pour toutes erreurs de compilation, voir la partie
prévue pour ça...
Shad0w |